//时间计算规则
// 当天消息，以每5分钟为一个跨度显示时间
// 消息超过一天、小于一周，显示星期+收发消息的时间
// 消息大于1周，显示手机收发时间的日期。



//获取当前时间
function currentDatetime(){
    let current = new Date()
    // let year = current.getFullYear(); //获取年份，4位数
    // let month = current.getMonth(); //获取月份 0——11
    // let date = current.getDate();   // 获取当前日  1-31
    // let day = current.getDay();  //获取星期 0-6 ，0代表周日
    // let time = current.getTime(); //获取当前时间从 1970.1.1开始的毫秒数
    // let hour = current.getHours();  //获取当前小时数    0-23
    // let minute = current.getMinutes();  //获取当前分钟数     0-59
    // let seconds = current.getSeconds(); //获取当前秒数 0-59
    // let mydate = current.toLocaleDateString(); //获取当前日期
    // let mytime = current.toLocaleTimeString(); //获取当前时间
    let timestamp = Date.parse(current); //获取时间戳  1970.1.1开始的秒数 最后的000是毫秒
    let datetime = current.toLocaleString();  //获取当前日期时间
    return {
        datetime,
        timestamp
    }
}



//时间戳转化为日期  时间戳10位或13位，最后三位000为毫秒
function stampToDatetime(stamp){
    let date = new Date(stamp)
    let Y = date.getFullYear();
    let M = (date.getMonth() + 1) < 10 ? ('0' + (date.getMonth() + 1) ): date.getMonth() + 1;
    let D = date.getDate() < 10 ? ('0' + date.getDate() ): date.getDate() + ' '
    let h = date.getHours() < 10 ? ('0' + date.getHours() ): date.getHours() ;
    let m = date.getMinutes() < 10 ? ('0' + date.getMinutes() ): date.getMinutes();
    let s = date.getSeconds() < 10 ? ('0' + date.getSeconds() ): date.getSeconds();
    return { Y, M, D, h, m, s }
}


// 日期转化为时间戳 参数格式为 YYYY-MM-DD hh:mm:ss 或者 YYYY-MM-DD
function datetimeToStamp(datetime){
    let date = new Date(datetime)
    let stamp = Date.parse(date);
    return stamp;
}



//判断是否显示及格式问题
function caldatetime(currentTimeStamp, preTimeStamp = null){
    if (!preTimeStamp) {
       return  showCalTime(currentTimeStamp)
    } else {
        if (intervalCal(currentTimeStamp, preTimeStamp)) {  //间隔大于5分钟
          return  showCalTime(currentTimeStamp)
        }else{      //间隔小于5分钟 不显示
            return "时间间隔太小";
        }
    }
}

//显示时间方法
// function showCalTime(currentTimeStamp) {  //传入用于计算的时间戳
function showCalTime(currentTimeStamp){  //传入用于计算的时间戳
    currentTimeStamp = parseInt(currentTimeStamp)
    let temp = new Date()
    let tempdatetime = stampToDatetime(Date.parse(temp));  //获取当前时间    年月日时分秒
    // console.log(tempdatetime);
    let itemdt = stampToDatetime(currentTimeStamp); //得到传入的数据    年月日时分秒
    // console.log(itemdt);

    //进行判断
    // 当天消息，以每5分钟为一个跨度显示时间
    // 消息超过一天、小于一周，显示星期+收发消息的时间
    // 消息大于1周，显示手机收发时间的日期。
    //1 超过一周（本周/上周）
    let tempweek = temp.getDay();
    if(Math.abs(parseInt(tempdatetime.D) - parseInt(itemdt.D)) > (tempweek) || parseInt(tempdatetime.M)!== parseInt(itemdt.M) || parseInt(tempdatetime.Y) !== parseInt(itemdt.Y)){
        // console.log(new Date(currentTimeStamp).toLocaleString())
        return new Date(currentTimeStamp).toLocaleString() 
    }else{
        if(parseInt(tempdatetime.D) !== parseInt(itemdt.D)){ //不是同一天
           let title = (parseInt(tempdatetime.D) - parseInt(itemdt.D))== 1? '昨天': '周'+(new Date(currentTimeStamp).getDay() + 1);
        //    return (title + ' ' + new Date(currentTimeStamp).toLocaleTimeString())
           return (title + ' ' + new Date(currentTimeStamp).toLocaleString())
        }else{
            // return new Date(currentTimeStamp).toLocaleTimeString();
            return new Date(currentTimeStamp).toLocaleString();
        }
    }
}

//判断时间间隔是否大于五分钟,返回 true/false
function intervalCal(curdts, predts) {
    let curd = stampToDatetime(curdts)
    let pred = stampToDatetime(predts)
    if(curd.Y !== pred.Y || curd.M !== pred.M || curd.D !== pred.D || curd.h !== pred.h || Math.abs(curd.m-pred.m)> 5){
        return true
    }else{
        return false
    }
  
   
}


module.exports = { caldatetime,datetimeToStamp};